﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ED_Nivelacion.Datos;

namespace ED_Nivelacion.Negocios
{
    public class DistribucionCriterio_C
    {
        ED_NivelacionEntities _objEntity = new ED_NivelacionEntities();

        public List<Distribucion_Criterio> ObtenerDCriterios()
        {
            List<Distribucion_Criterio> ListaDCriterio = new List<Distribucion_Criterio>();
            try
            {

                foreach (var item in _objEntity.SP_ObtenerDCriterio())
                {
                    ListaDCriterio.Add(new Distribucion_Criterio { idDsitribucion_Criterio = item.idDsitribucion_Criterio, Items = item.Items, Itens_Necesarios = item.Itens_Necesarios, Ponderacion = item.Ponderacion, idActor = item.idActor, idCriterio_Evaluacion = item.idCriterio_Evaluacion });
                }

                return ListaDCriterio;
            }
            catch (Exception)
            {
                return ListaDCriterio;
            }
        }

        public List<Distribucion_Criterio> FiltrarDCriteriosId(int _idActor)
        {
            List<Distribucion_Criterio> ListaDCriterio = new List<Distribucion_Criterio>();
            try
            {

                foreach (var item in _objEntity.SP_FiltrarDCriterioId(_idActor))
                {
                    ListaDCriterio.Add(new Distribucion_Criterio { idDsitribucion_Criterio = item.idDsitribucion_Criterio, Items = item.Items, Itens_Necesarios = item.Itens_Necesarios, Ponderacion = item.Ponderacion, idActor = item.idActor, idCriterio_Evaluacion = item.idCriterio_Evaluacion, Actor= item.Actor, Criterio = item.Criterio });
                }

                return ListaDCriterio;
            }
            catch (Exception)
            {
                return ListaDCriterio;
            }
        }

        public List<Distribucion_Criterio> FiltrarDCriteriosXActorIdCriterio(int _idActor, int _idCriterioEvaluacion)
        {
            List<Distribucion_Criterio> ListaDCriterio = new List<Distribucion_Criterio>();
            try
            {

                foreach (var item in _objEntity.SP_FiltrarCriterioIdCriterioANDIdActor(_idActor, _idCriterioEvaluacion))
                {
                    ListaDCriterio.Add(new Distribucion_Criterio { idDsitribucion_Criterio = item.idDsitribucion_Criterio, Items = item.Items, Itens_Necesarios = item.Itens_Necesarios, Ponderacion = item.Ponderacion, idActor = item.idActor, idCriterio_Evaluacion = item.idCriterio_Evaluacion });
                }

                return ListaDCriterio;
            }
            catch (Exception)
            {
                return ListaDCriterio;
            }
        }

        public List<Distribucion_Criterio> FiltrarDCriteriosXActorIdCriterioANDIdPeriod(int _idActor, int _idCriterioEvaluacion, int _idPeriodo)
        {
            List<Distribucion_Criterio> ListaDCriterio = new List<Distribucion_Criterio>();
            try
            {

                foreach (var item in _objEntity.SP_FiltrarCriterioIdCriterioANDIdActorXidPeriodo(_idActor, _idCriterioEvaluacion, _idPeriodo))
                {
                    ListaDCriterio.Add(new Distribucion_Criterio { idDsitribucion_Criterio = item.idDsitribucion_Criterio, Items = item.Items, Itens_Necesarios = item.Itens_Necesarios, Ponderacion = item.Ponderacion, idActor = item.idActor, idCriterio_Evaluacion = item.idCriterio_Evaluacion });
                }

                return ListaDCriterio;
            }
            catch (Exception)
            {
                return ListaDCriterio;
            }
        }
        public List<Distribucion_Criterio> ValidarDCriterios(Distribucion_Criterio _obj)
        {
            List<Distribucion_Criterio> ListaDCriterio = new List<Distribucion_Criterio>();
            try
            {

                foreach (var item in _objEntity.SP_ObtenerDCriterio().Where(c=> c.idActor == _obj.idActor && c.idCriterio_Evaluacion == _obj.idCriterio_Evaluacion && c.idPeriodo == _obj.idPeriodo))
                {
                    ListaDCriterio.Add(new Distribucion_Criterio { idDsitribucion_Criterio = item.idDsitribucion_Criterio, Items = item.Items, Itens_Necesarios = item.Itens_Necesarios, Ponderacion = item.Ponderacion, idActor = item.idActor, idCriterio_Evaluacion = item.idCriterio_Evaluacion, idPeriodo = item.idPeriodo });
                }

                return ListaDCriterio;
            }
            catch (Exception)
            {
                return ListaDCriterio;
            }
        }
        
        public string AgregarDCriterio(Distribucion_Criterio _obj)
        {
         string msm = "OK";
         var DC = _objEntity.SP_ObtenerDCriterio().Where(c => c.idActor == _obj.idActor && c.idCriterio_Evaluacion == _obj.idCriterio_Evaluacion && c.idPeriodo == _obj.idPeriodo).Count();
         try
         {
             if (DC == 0)
             {
                 if (_obj.Items >= _obj.Itens_Necesarios)
                 {
                     if (_obj.Ponderacion <= 100)
                     {
                         _objEntity.SP_InsertarDCriterio(_obj.Items, _obj.Itens_Necesarios, _obj.Ponderacion, _obj.idActor, _obj.idCriterio_Evaluacion, _obj.idPeriodo);
                     }
                     else
                     {
                         msm = "Conflictos con el valor de ponderacion";
                     }
                 }
                 else
                 {
                     msm = "El valor de Items debe ser mayor al de requeridos";
                 }
             }
             else
             {
                 msm = "Ya se asigno a este criterio";
             }
         }
         catch (Exception)
         {

             msm = "Error al Ingresar";
         }

            return msm;
        
        }

        public string EditarDCriterio(Distribucion_Criterio _obj)
        {
            string msm = "OK";
            try
            {
                _objEntity.SP_ActualizarDCriterio(_obj.idDsitribucion_Criterio, _obj.Items, _obj.Itens_Necesarios, _obj.Ponderacion, _obj.idActor, _obj.idCriterio_Evaluacion, _obj.idPeriodo); 
            }
            catch (Exception)
            {

                msm = "Error al actualizar";
            }

            return msm;
        }

        public string EliminarDCriterio(int _idDistribucionCriterio) 
        { 
        string msm = "OK";
            try
            {
                _objEntity.SP_EliminarDCriterio(_idDistribucionCriterio); 
            }
            catch (Exception)
            {

                msm = "Error al Eliminar";
            }

            return msm;
        }
        
        }
    }

